﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.SqlClient;
using ProjetoDLL.Model;

namespace ProjetoDLL.DAO
{
    public class ProdutosPedidoDAO : BaseDAO<ProdutosPedido>
    {
        private ProdutoDAO prController = new ProdutoDAO();
        private PedidoDAO pdController = new PedidoDAO();

        public override void Inserir(ProdutosPedido obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("INSERT INTO tb_produtos_pedido VALUES({0},{1},{2})",
                obj.Produto.IdProduto, obj.Pedido.IdPedido, obj.QtdProdutos);

            exec_comando(query, conexao);
        }

        public override void Atualizar(ProdutosPedido obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("UPDATE tb_produtos_pedido SET quantidade_produto={0} WHERE pk_produto={1} AND pk_pedido={2}",
                                   obj.QtdProdutos, obj.Produto.IdProduto, obj.Pedido.IdPedido);

            exec_comando(query, conexao);
        }

        public override void Excluir(ProdutosPedido obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("DELETE FROM tb_produtos_pedido WHERE pk_produto = {0} AND pk_pedido = {1}",
                obj.Produto.IdProduto, obj.Pedido.IdPedido);

            exec_comando(query, conexao);
        }

        public override ProdutosPedido RecuperarUm(int chave)
        {
            return null;
        }

        public ProdutosPedido RecuperarUm(int id_produto, int id_pedido)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            int pk_produto = 0, pk_pedido = 0;
            string query;
            SqlDataReader dr;

            ProdutosPedido produtosPedido = new ProdutosPedido();

            query = string.Format("SELECT * FROM tb_produtos_pedido WHERE pk_produto = {0} AND pk_pedido = {1}",
                id_produto, id_pedido);

            SqlCommand cmd = new SqlCommand(query, conexao);

            conexao.Open();
            dr = cmd.ExecuteReader();

            if (dr.Read())
            {
                pk_produto = Convert.ToInt32(dr["pk_produto"]);
                pk_pedido = Convert.ToInt32(dr["pk_pedido"]);
                produtosPedido.QtdProdutos = Convert.ToInt32(dr["quantidade_produto"]);
            }

            dr.Close();
            conexao.Close();

            produtosPedido.Produto = prController.RecuperarUm(pk_produto);
            produtosPedido.Pedido = pdController.RecuperarUm(pk_pedido);

            return produtosPedido;
        }

        public override List<ProdutosPedido> RecuperarTodos()
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            List<int> listaPkProduto = new List<int>();
            List<int> listaPkPedido = new List<int>();
            List<ProdutosPedido> listaEntidades = new List<ProdutosPedido>();
            SqlDataReader dr;
            SqlCommand cmd = new SqlCommand("SELECT * FROM tb_produtos_pedido", conexao);
            conexao.Open();
            dr = cmd.ExecuteReader();

            ProdutosPedido produtosPedido;

            while (dr.Read())
            {
                produtosPedido = new ProdutosPedido();
                listaPkProduto.Add(Convert.ToInt32(dr["pk_produto"]));
                listaPkPedido.Add(Convert.ToInt32(dr["pk_pedido"]));
                produtosPedido.QtdProdutos = Convert.ToInt32(dr["quantidade_produto"]);
                listaEntidades.Add(produtosPedido);
            }

            dr.Close();
            conexao.Close();

            for (int i = 0; i < listaEntidades.Count; i++)
            {
                listaEntidades[i].Produto = prController.RecuperarUm(listaPkProduto[i]);
                listaEntidades[i].Pedido = pdController.RecuperarUm(listaPkPedido[i]);
            }

            return listaEntidades;
        }
    }
}
